Fix GeoPandas dataset compatibility for naturalearth_cities#5420
Fix GeoPandas dataset compatibility for naturalearth_cities#5420AliAbouelazm wants to merge 2 commits intoplotly:mainfrom
Conversation
Update documentation examples to work with both GeoPandas < 1.0 and >= 1.0. The old gpd.datasets.get_path() method was removed in GeoPandas 1.0. This fix: - Tries the old method first (for backward compatibility) - Falls back to geodatasets package for GeoPandas >= 1.0 - Includes a URL fallback if geodatasets is not available Fixes plotly#4778
…DataFrame\n\nRemoves URL fallback to prevent CI build failures in restricted environments.\nKeeps compatibility with GeoPandas <1.0 and >=1.0, and avoids extra deps.
|
Thanks for the PR! We'll try to review this as we have time. This seems to be related to #4782. |
LiamConnors
left a comment
There was a problem hiding this comment.
Thanks for the PR! I have added a few comments. Let me know if you have any questions.
| import geodatasets | ||
| geo_df = gpd.read_file(geodatasets.get_path('naturalearth.cities')) |
There was a problem hiding this comment.
This dataset doesn't currently exist on geodatasets, so this will never be successful even with geopandas >=1.0
| try: | ||
| # Try the old method (GeoPandas < 1.0) | ||
| geo_df = gpd.read_file(gpd.datasets.get_path('naturalearth_cities')) | ||
| except (AttributeError, ValueError): | ||
| # Use the new method (GeoPandas >= 1.0) | ||
| try: | ||
| import geodatasets | ||
| geo_df = gpd.read_file(geodatasets.get_path('naturalearth.cities')) | ||
| except ImportError: | ||
| # Fallback: build a tiny in-memory GeoDataFrame (no internet or extra deps) | ||
| from shapely.geometry import Point | ||
| geo_df = gpd.GeoDataFrame( | ||
| {"name": ["City A", "City B"], "geometry": [Point(0, 0), Point(10, 10)]}, | ||
| crs="EPSG:4326", | ||
| ) |
There was a problem hiding this comment.
As 'naturalearth.cities' does not exist on geodatasets, I think the best thing to do here would be to have just the example of the dataframe created using GeoDataFrame, like you show in the except block, but with some real cities.
So something like
import plotly.express as px
import geopandas as gpd
from shapely.geometry import Point
geo_df = gpd.GeoDataFrame({
'name': ['London', 'Paris', 'Berlin', 'Madrid', 'Rome'],
'geometry': [
Point(-0.13, 51.51),
Point(2.35, 48.86),
Point(13.41, 52.52),
Point(-3.70, 40.42),
Point(12.50, 41.90),
]
}, crs="EPSG:4326")
fig = px.scatter_map(geo_df,
lat=geo_df.geometry.y,
lon=geo_df.geometry.x,
hover_name="name",
zoom=3)
fig.show()And something similar for the scatter-plots-on-maps example
|
@LiamConnors Any reason not to simply require |
I agree. It doesn't need to be compatible with old |
Closes #5289
Update documentation examples to support both GeoPandas < 1.0 and >= 1.0.
Context: GeoPandas 1.0 removed the datasets accessor used in
gpd.datasets.get_path("naturalearth_cities").Changes:
geodatasetspackage for GeoPandas >= 1.0geodatasetsis not availableFiles updated:
Docs-only change.